package com.pro01.apirednote.service;

import com.pro01.apirednote.pojo.Content;
import com.pro01.apirednote.pojo.PageResult;

/**
 * 缓存服务接口
 * 用于处理各种数据的缓存操作
 */
public interface CacheService {

    /**
     * 缓存搜索结果
     * @param key 缓存键
     * @param pageResult 搜索结果
     * @param expireSeconds 过期时间（秒）
     */
    void cacheSearchResult(String key, PageResult<Content> pageResult, long expireSeconds);
    
    /**
     * 获取缓存的搜索结果
     * @param key 缓存键
     * @return 缓存的搜索结果，如果不存在则返回null
     */
    PageResult<Content> getCachedSearchResult(String key);
    
    /**
     * 删除缓存
     * @param key 缓存键
     */
    void deleteCache(String key);
    
    /**
     * 生成搜索缓存键
     * @param searchType 搜索类型
     * @param keyword 关键词
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 缓存键
     */
    String generateSearchKey(String searchType, String keyword, int pageNum, int pageSize);
    
    /**
     * 清除所有搜索缓存
     * @return 清除的缓存数量
     */
    long clearAllSearchCache();
    
    /**
     * 清除包含特定内容ID的搜索缓存
     * 注意：这是一个代价较高的操作，因为需要加载每个缓存并检查其中是否包含指定内容
     * @param contentId 内容ID
     * @return 清除的缓存数量
     */
    long clearSearchCacheContainingContent(Long contentId);
} 